﻿using System.Collections.Generic;
using MIAP.Entidades;

namespace MIAP.DataAccess.Interfaces
{
    /// <summary>
    /// Contrato del DAO de procesos de ConsultaCargasEjecucionProyectoDao.
    /// </summary>
    public interface IConsultaCargasEjecucionProyectoDao
    {
        /// <summary>
        /// Obtiene los tipos de proceso relacionados con las cargas y recargas de archivos y ejecución y reejecución de proyectos. 
        /// </summary>
        /// <returns>Lista con los tipos de procesos.</returns>
        IList<CatalogoInfo> GetTipoProceso();

        /// <summary>
        /// Obtiene todas las cargas, recargas de un archivo.
        /// </summary>
        /// <param name="consultaCargaFilters">Filtros.</param>
        /// <returns>Lista de los archivos con cargas y recargas de acuerdo a los filtros.</returns>
        IList<ConsultaCargaEjecucionInfo> GetCargasArchivos(ConsultaCargaEjecucionInfo consultaCargaFilters);

        /// <summary>
        /// Obtiene las ejecuciones y reejecuciones de un proyecto.
        /// </summary>
        /// <param name="consultaCargaFilters">Filtros.</param>
        /// <returns>Lista de los proyectos ejecutados y reejecutados de acuerdo a los filtros.</returns>
        IList<ConsultaCargaEjecucionInfo> GetEjecucionProyectos(ConsultaCargaEjecucionInfo consultaCargaFilters);

        /// <summary>
        /// Obtiene el autorizador de la recarga del archivo.
        /// </summary>
        /// <param name="listArchivos">Lista de archivos.</param>
        /// <returns>Lista con los nombres de los autorizadores.</returns>
        IList<EjecutorInfo> GetAutorizadorArchivos(List<EjecutorInfo> listArchivos);

        /// <summary>
        /// Obtiene el autorizador de la ejecución o reejecución del proyecto.
        /// </summary>
        /// <param name="listProyectos">Lista de proyectos.</param>
        /// <returns>Lista con los nombres de los autorizadores.</returns>
        IList<EjecutorInfo> GetAutorizadorProyectos(List<EjecutorInfo> listProyectos);

        /// <summary>
        /// Obtiene el nombre del versionador de la carga o recarga del archivo.
        /// </summary>
        /// <param name="listArchivosProyectos">Lista de archivos versionables.</param>
        /// <returns>Lista de ids de archivos y sus respectivos versionadores.</returns>
        IList<EjecutorInfo> GetNombreVersionador(List<EjecutorInfo> listArchivosProyectos);
    }
}
